#!/usr/bin/python
#
# 整式为单项式和多项式的统称，是有理式的一部分，在有理式中可以包含加，减，乘，除、乘方五种运算，但在整式中除数不能含有字母。
# 1) 单项式: 2x/3, 0.4x + 3, x*y是单项式， x/y不是整式；
# 2) 多项式: 由若干个单项式相加组成的代数式叫做多项式（若有减法：减一个数等于加上它的相反数）.
#    多项式中的每个单项式叫做多项式的项，这些单项式中的最高项次数，就是这个多项式的次数。其中多项式中不含字母的项叫做常数项.
#   例如: 3x^2 + 4x - 1,  -3/2x^3 - 5x/3 + 2, 3x^2y^5 + 4xy - 3
# 算法要求：计算整式的次和项
#

import sys
import os

# 判断单项式的合法性
# 单项式只包含如下字符：+, -, *, /, ^, 0-9, a-z
# 判断: 非法输入字符，以及分母为字母的情况
# @param single_expression: 单项式
# @return True或False
def valid_single_expression(single_expression: str):
    for i in range(len(single_expression)):
        c = single_expression[i]
        if c in ('+', '-', '*', '/', '^'):
            continue

        n = ord(c)
        if n >= ord('0') and n <= ord('9'):
            continue

        if n >= ord('a') and n <= ord('z'):
            if i > 0 and single_expression[i - 1] == '/':
                return False # 分母为字母
        else:
            return False # 非法字符

    return True

# 计算单项式的次数
# @param single_expression: 单项式
# @return 单项式次数
def do_single_expression_count(single_expression: str):
    length = len(single_expression)
    count = 0

    for i in range(length):
        c = single_expression[i]
        n = ord(c)
        if n >= ord('a') and n <= ord('z'):
            if i + 1 < length and single_expression[i + 1] == '^':
                # ^后面的数字值就是变量的次数
                j = i + 2
                while j < length:
                    n = ord(single_expression[j])
                    if n >= ord('0') and n <= ord('9'):
                        j += 1
                    else:
                        break
                count += int(single_expression[i + 2: j])
            else:
                # 没有^就是变量次数是1
                count += 1

    return count

# integral expression（整式函数），简称IE：
# 计算整式的次数和项数
# @param a: 整式，变量只能用小写，乘方用^, 也就是a中只包含如下字符：+, -, *, /, ^, 0-9, a-z
#   注意: 这里不考虑括号的问题.
def do_integral_expression(a: str):
    a = a.replace(' ', '') # 去掉字符串的任何空格
    print('您输入的整式是:%s' % a)

    single_expressions = [] # 单项式集合
    j = 0 # 指向单项式开头
    k = 0
    for i in range(len(a)):
        k = i
        if a[i] == '+' or a[i] == '-' and i != 0:
            single_expressions.append(a[j:i])
            j = i

    single_expressions.append(a[j:k + 1])

    max_count = 0 # 单项式的最大次数，就是整个整式的次数
    for single_expression in single_expressions:
        if not valid_single_expression(single_expression):
            print('非法单项式: %s, 您输入的不是整式!' % single_expression)
            return

        count = do_single_expression_count(single_expression)
        print('单项式: %s, 次数: %d' % (single_expression, count))
        if count > max_count:
            max_count = count

    number_of_items = len(single_expressions) # 项数
    print('整式的项数是: %d, 次数是: %d' % (number_of_items, max_count))

# 入口函数
def main():
    while True:
        a = input('请输入式子:')
        a = a.strip() # 去掉左右两边的空格
        if a == '':
            print('您输入为空，请输入正确的整式!')
        else:
            do_integral_expression(a)
            break

if __name__ == "__main__":
    main()
